//
//  userAccViewModel.swift
//  weibo1
//
//  Created by 李进 on 15/10/17.
//  Copyright © 2015年 李进. All rights reserved.
//

import Foundation

class userAccViewModel{
    
    var userModel:UserAccModel?
    
    //头像视图的url 连接
    var avalurl: NSURL {
        
        return NSURL(string: userModel?.avatar_large ?? "")!
    }
    
    //token
    var accessToken:String? {
        
        return (userModel?.access_token)
    }
    
    //创建一个单例
    static let shareAccViewModel = userAccViewModel()
    
    /// 归档保存的路径 - 计算型属性(类似于有返回值的函数，可以让调用的时候，语义会更清晰)
    /// 如果在 OC 中，可以通过只读属性／函数的方式实现
    private var accountPath: String {
        
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        
        return (path as NSString).stringByAppendingPathComponent("jjjjj.plist")
    }
    
    //用来判断用户时否已经登录
    var isLogin: Bool {
        
        
        return userModel?.access_token != nil
    }
    
    //构造函数
    private init(){
        
        userModel = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? UserAccModel
        //print(userModel?.access_token)
    }
}


// MARK: - 加载用户 信息

extension userAccViewModel {
    
    
    func loadCODA(code:String, finished:((isSuccessed: Bool) ->())){
        
        SWWebTools.shareWebTools.loadAccessToken(code) { (result, error) -> () in
            
            // 1> 判断错误
            if error != nil {
                print("出错了")
                
                finished(isSuccessed: false)
                return
            }
            
            // 2> 输出结果
            
            
            //print("\(result) 333333")
            self.userModel = UserAccModel(dict: (result as? [String: AnyObject])!)
            

            //拿到 token 以后就执行下面的网络任务进行将数据保存
            self.loadUserInfo(self.userModel!, finished: finished)
    }
        
        
}
    /// 加载用户信息方法
    func loadUserInfo(userAccmodel:UserAccModel ,finished:(isSuccessed: Bool) ->()){
        
        SWWebTools.shareWebTools.loaduserInfo(userAccmodel.uid!) { (result, error) -> () in
            
            //判断返回的错误是否有值
            guard error == nil else{
                
                finished(isSuccessed: false)
                print(error)
                return
            }
            
            //将返回的数据转化成字典，以便实现字典转模型
            //如果返回的数据是 anyobject 需要使用 as 来进行转化
            guard let dict = result as? [String : AnyObject] else{
                //这边是为了似的dict中的 token 必须有值
                return
            }
            
            userAccmodel.screen_name = dict["screen_name"] as? String
            
            userAccmodel.avatar_large = dict["avatar_large"] as? String
            
            //然后进行保存，数据到偏好设置当中
            
            userAccmodel.saveData()
            //最后只样就是控制器与模型久直接接触了不满足 mvvm 的模式所以可以将这个方法范大 vm中
            finished(isSuccessed: true)
        }
    }

}
